package com.sunwayworld.baseline.framework.deviceDocking.handler;

import com.sunwayworld.baseline.framework.deviceDocking.dto.MessageDTO;
import io.netty.channel.ChannelHandlerContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.Observable;
import java.util.Observer;

/**
 * 设备对接 数据处理抽象接口    -- 观察者
 */
public interface DockingObserver extends Observer {

    Logger log = LogManager.getLogger(DockingObserver.class);

    /**
     * 消息处理  -- 观察者模式
     */
    @Override
    default void update(Observable o, Object arg) {
        if(o instanceof MessageObservable) {
            if (arg instanceof MessageDTO) {
                MessageDTO message = (MessageDTO) arg;
                if (getType().equalsIgnoreCase(message.getType())) {
                    ChannelHandlerContext ctx = message.getCtx();
                    String key = ctx.channel().id().toString();
                    String data = message.getData();
                    log.info("{} key：{} , 数据： {}" , getType(), key , data);
                    this.handle(ctx, data);
                }
            }
        }
    }

    /**
     * @return 设备类型  -- 保证每个设备唯一
     */
    String getType();

    /**
     * 实际数据处理接口
     */
    void handle(ChannelHandlerContext ctx, String data);

}
